package co.yixiang.yshop.module.order.service.storeaftersales;

import co.yixiang.yshop.module.order.controller.app.afterorder.param.AppReturnLogisticsParam;
import co.yixiang.yshop.module.order.controller.app.afterorder.param.AppStoreAfterSalesParam;
import co.yixiang.yshop.module.order.controller.app.afterorder.vo.AppAfterSalesDetailQueryVo;
import co.yixiang.yshop.module.order.controller.app.afterorder.vo.AppStoreAfterSalesVo;
import co.yixiang.yshop.module.order.controller.app.afterorder.vo.AppStoreOrderAfterSalesDetailVo;
import co.yixiang.yshop.module.order.controller.app.afterorder.vo.AppStoreOrderCartInfoVo;
import co.yixiang.yshop.module.order.dal.dataobject.storeaftersales.StoreAfterSalesDO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * 售后记录 Service 接口
 *
 * @author yshop
 */
public interface AppStoreAfterSalesService extends IService<StoreAfterSalesDO> {

    /**
     * 创建售后订单
     *
     * @param userId               用户id
     * @param storeAfterSalesParam /
     */
    Long applyForAfterSales(Long userId, AppStoreAfterSalesParam storeAfterSalesParam);

    /**
     * 查询订单详情
     *
     * @param vo
     * @return
     */
    List<AppStoreOrderCartInfoVo> checkOrderDetails(AppAfterSalesDetailQueryVo vo);

    /**
     * 查询订单详情
     *
     * @param key 售后单号
     * @return
     */
    AppStoreOrderAfterSalesDetailVo checkAfterSalesDetails(String key);

    /**
     * 查询列表
     *
     * @param uid       用户id
     * @param type      状态
     * @param page      页
     * @param orderCode
     * @param limit     数量
     * @return
     */
    List<AppStoreAfterSalesVo> salesList(Long uid, Integer type, Integer page, String orderCode, Integer limit);

    /**
     * 查询详情
     *
     * @param key 订单号
     * @param id  售后单id
     * @param uid 用户id
     */
    AppStoreAfterSalesVo getStoreInfoByOrderCodeAndAfterIdAndUid(String key, Long id, Long uid);

    /**
     * 查询详情
     *
     * @param key 订单号
     * @param uid 用户id
     */
    List<AppStoreAfterSalesVo> getStoreInfoByOrderCodeAndUid(String key, Long uid);

    /**
     * 撤销申请
     *
     * @param key 订单号
     * @param uid 用户id
     * @param id
     * @return Boolean
     */
    Boolean revoke(String key, Long uid, Long id);

    /**
     * 添加退货的快递信息
     *
     * @param param 退货物流参数
     * @return
     */
    Boolean addLogisticsInformation(AppReturnLogisticsParam param);


    /**
     * 删除售后订单
     *
     * @param orderCode /
     * @param id
     * @return /
     */
    Boolean deleteAfterSalesOrder(String orderCode, Long id);


}
